package cn.scau.server.service.impl;

import cn.scau.server.dto.EmpDeptDTO;
import cn.scau.server.dto.EmpPositionPageDTO;
import cn.scau.server.mapper.EmpPosMapper;
import cn.scau.server.pojo.Admin;
import cn.scau.server.pojo.Emp;
import cn.scau.server.mapper.EmpMapper;
import cn.scau.server.pojo.EmpPos;
import cn.scau.server.service.EmpService;
import cn.scau.server.vo.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 代码不跑我先跑
 * @since 2025-03-30
 */
@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
    private final EmpMapper empMapper;

    public EmpServiceImpl(EmpMapper empMapper, EmpPosMapper empPosMapper) {
        this.empMapper = empMapper;
    }



    @Override
    public ResultVO<IPage<EmpDeptQueryVO>> pageEmp(EmpDeptDTO empDeptDTO) throws Exception {
        //获取分页大小，如果为 null，则使用默认值 10
        int pageSize = (empDeptDTO.getPageSize() != null) ? empDeptDTO.getPageSize() : 10;
        // 获取当前页码，如果为 null，则使用默认值 1
        int pageNum = (empDeptDTO.getPageNum() != null) ? empDeptDTO.getPageNum() : 1;
        IPage<EmpDeptQueryVO> page=new Page<>(pageNum,pageSize);
        return ResultVO.success(null,empMapper.pageEmp(page,empDeptDTO));
    }

    @Override
    public ResultVO<EmpDeptPosQueryVO> queryEmpDeptPos(String empId) throws Exception {
        return ResultVO.success(null,empMapper.queryEmpDeptPosByEmp(empId));
    }

    //分页查询职位信息
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ResultVO<IPage<EmpPosDeptVO>> pagePosition(EmpPositionPageDTO empPositionPageDTO) throws Exception{
        //获取分页大小，如果为 null，则使用默认值 10
        int pageSize = (empPositionPageDTO.getPageSize() != null) ? empPositionPageDTO.getPageSize() : 10;
        // 获取当前页码，如果为 null，则使用默认值 1
        int pageNum = (empPositionPageDTO.getPageNum() != null) ? empPositionPageDTO.getPageNum() : 1;
        IPage<EmpPosDeptVO> page=new Page<>(pageNum,pageSize);
        return ResultVO.success("查询成功",empMapper.pagePosition(page,empPositionPageDTO));
    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public  ResultVO insertEmployeeWithDept(EmpPosCreateVO empPosCreateVO){
        // 插入员工表
        empMapper.insertEmployee(empPosCreateVO);
        // 插入员工部门关联表
        empMapper.insertEmpPos(empPosCreateVO.getEmpId(), empPosCreateVO.getDeptId());
        return ResultVO.success("添加成功");
    }

    //根据员工id查找员工姓名
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ResultVO getEmpNameById(String id){
        if(id==null||"".equals(id)){
            return ResultVO.fail("员工编号不存在");
        }

        QueryWrapper<Emp> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("emp_id", id);
        Emp emp = empMapper.selectOne(queryWrapper);
        if (emp == null) {
            return ResultVO.fail("员工不存在");
        }
        return ResultVO.success("查找成功", emp.getName());
    }
}
